The type of the `responseRenderer` config property is as follows:
```tsx
// A React functional component (FC) that receives the props for streamed or batched data.
// The AiMsg type is the type of the message content.
type ResponseRenderer<AiMsg> =  FC<StreamResponseComponentProps<AiMsg>> | FC<BatchResponseComponentProps<AiMsg>>;
```

**For streamed data**, the custom renderer is a React functional component that receives the following props, where
`AiMsg` is the type of the message content.

```tsx
type StreamResponseComponentProps<AiMsg> = {
    uid: string; // Unique identifier generated by NLUX
    dataTransferMode: 'stream'; // Always 'stream' for streamed data

    // The status of the message, which can be 'streaming' or 'complete'
    // When an error occurs, the entire message will be removed from the chat area and an error message
    // will be displayed to the user.
    status: 'streaming' | 'complete';

    // The content of the message. This will only be defined when the status is 'complete'.
    // It will include an array of all the chunks (partial messages) received from the server.
    content?: AiMsg[];

    // The raw server response without any processing.
    // This is only available with NLUX standard adapters, and only when the status is 'complete'.
    serverResponse?: unknown[];

    // A React ref object that should be pointed to the container element where streamed markdown messages
    // should be appended
    containerRef: RefObject<HTMLElement>;
};
```

**For batched data**, the custom renderer is a React functional component that receives the following props.
```tsx
type BatchResponseComponentProps<AiMsg> = {
    uid: string; // Unique identifier generated by NLUX
    dataTransferMode: 'batch'; // Always 'batch' for batched data
    status: 'complete'; // The status of the message, which is always 'complete' for batched data
    content: AiMsg; // The content of the message
    serverResponse: unknown; // The raw server response without any processing
};
```
